package collection;

import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

public class NewForDemo {
    public static void main(String[] args) {
        String []array = {"one","two","three","four","five"};
        for (int i = 0;i<array.length;i++){
            String str = array[i];
            System.out.println(str);
        }
        /*
            新循环遍历数组就是普通for循环遍历，编译器编译后就会改为普通for循环
         */
        for (String str : array){
            System.out.println(str);
        }
        /*
            泛型 JDK5之后推出的另一个特性。
            泛型也称为参数化类型，允许我们在使用一个类时指定它里面属性的类型，
            方法参数或返回值的类型，使得我们使用一个类时可以更灵活。
            泛型被广泛应用于集合中，用来指定集合中的元素类型。
            支持泛型的类在使用时如果未指定泛型，那么默认就是原型Object
         */
        Collection <String> c = new ArrayList<>();
        c.add("one");//编译器会检查add方法的实参是否为String类型
        c.add("two");
        c.add("three");
        c.add("four");
        c.add("five");
//        c.add(132);//编译不通过
        //迭代器遍历
        Iterator <String >it = c.iterator();
        while (it.hasNext()){
            //编译器编译代码时会根据迭代器指定的泛型补充造型代码
            String str = it.next();//获取元素时无需再造型
            System.out.println(str);
        }
        /*
            新循环遍历集合就是迭代器遍历，编译器编译代码后会改为迭代器
            因此不要在新循环遍历集合的过程中使用集合的方法增删元素。
         */
        //新循环遍历
        for(String str : c){
            System.out.println(str);
        }

    }
}
